<?php

/**
 * @see Zend_Db_Table_Abstract
 */
require_once 'Zend/Db/Table/Abstract.php';

/**
 * Classe de acesso ao banco de dados. Incluida novas funciona-
 * lidades
 *
 * @category Tavs
 * @package Tavs_Db_Table
 *
 * @uses Zend_Db_Table_Abstract
 *
 * @author Tales Santos <tales.augusto.santos>
 */
class Tavs_Db_Table extends Zend_Db_Table_Abstract
{
	/**
	 * Nome da classe que representa um registro na tabela
	 *
	 * @var string
	 */
	protected $_rowClass = 'Tavs_Db_Table_Row';

    /**
     * Remove as colunas que nao pertence ao Model
     *
     * @param $data array Array chave=>valor
     *
     * @return array
     */
    protected function _clearData(array $data)
    {
        $cols = array_keys($this->info(Zend_Db_Table::METADATA));
        $data_cols = array_keys($data);

        foreach ($data_cols as $data_col) {
            if (!in_array($data_col, $cols)) {
                unset($data[$data_col]);
            }
        }

        return $data;
    }

    /**
     * Insere um novo registro limpando o array $data
     *
     * @param array $data Array chave/valor a ser inserido
     *
     * @return mixed The primary key of the row inserted.
     */
    public function insert(array $data)
	{
	    $data = $this->_clearData($data);
	    return parent::insert($data);
	}

	/**
	 * Atualiza registros no banco de dados limpando o array $data
	 *
	 * @param array $data Array Chave/valor a ser alterado
	 * @param array|string $where An SQL WHERE clause, or an array of SQL WHERE clauses.
	 *
	 * @return int The number of rows updated
	 */
	public function update(array $data, $where)
	{
	    $data = $this->_clearData($data);
	    return parent::update($data, $where);
	}

	/**
	 * Gera o multioptions de um model
	 *
	 * @param string $value_col Coluna que representa o valor do option
	 * @param string $text_col Coluna que representa o texto do option
	 *
	 * @return array
	 */
	public function toMultiOptions($value_col, $text_col)
	{
	    $select = $this->select();
	    $select->from($this, array($value_col, $text_col));

	    $rs = $this->fetchAll($select);

	    $pairs = array();
	    if ($rs->count() > 0) {
	        $rs = $rs->toArray();
	        foreach ($rs as $row) {
	            $value = $row[$value_col];
	            $text  = $row[$text_col];
	            $pairs[$value] = $text;
	        }
	    }

	    return $pairs;
	}

}